Skip to content

ci: generate baseline benchmark projects with the baseline release generator - #921

Merged
kvlonge merged 2 commits into
mainfrom
ci/release-performance-baseline-generator
Oct 3, 2026
Merged

kvlonge merged 2 commits into
mainfrom
ci/release-performance-baseline-generator

Conversation

@kvlonge

@kvlonge kvlonge commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Why

Release PR #918 is blocked: the release-performance comparison generated its benchmark projects with the current generator, which now writes FUNCTION (description …), and compiled them with the previous release, which rejects that key. Any generator change that adds syntax breaks this job. Its self-comparison E2E was also flaky on wall-time noise (CHI-481).

Changes

  • The baseline compiles projects generated by its own generator, taken from the release tag via git archive or --baseline-source. The candidate keeps its own generator. The report records which generator produced the baseline's projects.
  • One shared run_checkout_generator helper for this job and the same-runner compile ratio job.
  • The self-comparison E2E asserts report structure, per-side generation and a verdict consistent with the exit code. Fixed-timing unit tests cover the real 1.25x verdict logic, including wall-only regressions at CPU parity.

Verification

  • Local simulation: baseline 0.132.1 (PyPI and tag source) vs candidate main; both sides compile and the comparison passes.
  • Unit tests for tag extraction, generator failures and per-side generation; the E2E passed 3 times under heavy load.
  • One independent review; make test, make check-ci.

…ator

The release performance comparison generated its benchmark projects with
the candidate's generator and compiled them with the previous release, so
any generator syntax newer than that release (such as FUNCTION
descriptions) failed the baseline before timing. The baseline now runs
projects written by its own generator: the release tag's source is
extracted with git archive (or taken from --baseline-source) and its
write_pristine_projects runs with this interpreter, with cwd and
PYTHONPATH set to that source, through the checkout generator runner
shared with the same-runner compile ratio job. The candidate keeps its
own generator. Generation failures stop the comparison with the
generator's stderr tail, and the report and evidence record the
baseline's generator.
… runner noise

The E2E compares one build with itself using a single run, so asserting a
passed verdict depended on wall-time noise (a 1.31x wall ratio at 0.99x
CPU failed CI). It now asserts the report structure, every command row,
the per-side generator markers and the recorded evidence, and accepts
either verdict as long as the exit code matches it. The production 1.25x
limits are unchanged; the verdict unit tests gain fixed-timing cases for
a wall-only regression at CPU parity and a wall-only slowdown just under
the limit.

Fixes CHI-481
@kvlonge
kvlonge enabled auto-merge (squash) October 3, 2026 05:28
@kvlonge
kvlonge merged commit eb8e2ee into main Oct 3, 2026
31 checks passed
@kvlonge
kvlonge deleted the ci/release-performance-baseline-generator branch October 3, 2026 06:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant